/**
 *kuwang
 * 2019年9月25日
 */
package com.yidu.privilege.Service.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.yidu.privilege.Dao.RoleDao;
import com.yidu.privilege.Dao.UserAndroleMapper;
import com.yidu.privilege.Dao.UserDao;
import com.yidu.privilege.Domain.Role;
import com.yidu.privilege.Domain.User;
import com.yidu.privilege.Domain.UserAndrole;
import com.yidu.privilege.Service.UserService;
import com.yidu.privilege.vo.UserVo;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.yidu.privilege.Utils.Pages;
import com.yidu.privilege.vo.RoleVo;

import javax.annotation.Resource;

/**
 * @author kuwang
 *用户试实现类
 * 2019年9月25日 下午1:23:38
 */
@Service
public class UserServiceimpl implements UserService {
	/**
	 * 用户dao
	 */
	@Resource
	private UserDao userDao;
	/**
	 * 用户角色dao
	 */
	@Resource
	private UserAndroleMapper userAndroleMapper;
	/**
	 * 角色dao
	 */
	@Resource
	private RoleDao roleDao;

	/**
	 * 逻辑删除
	 * @param id 用户id
	 */
	@Override
	public void delete(Integer id) {
		// TODO Auto-generated method stub
		//查询用户
		User s=userDao.finByid(Integer.valueOf(id));
		//修改状态
		s.setUsState("1");
		//调用修改方法
		userDao.updates(s);

	}

	/**
	 * 查所有 分页
	 *
	 * @param uservo 用户vo
	 * @param page 分页
	 * @return
	 */
	@Override
	public List<UserVo> finAll(UserVo uservo, Pages page) {
		//用户模型
		User po = new User();
		//vo转po
		BeanUtils.copyProperties(uservo, po);
		//查所有用户
		List <User> list = userDao.finAll(po, page);
		//用户vo集合
		List <UserVo> listvo =new ArrayList<UserVo>();
		//循环
		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
			//用户
			User user = (User) iterator.next();
			//用户vo模型
			UserVo vo = new UserVo();
			//po转vo
			BeanUtils.copyProperties(user, vo);
			//加入数组
			listvo.add(vo);
		}
		//返回数组
		return listvo;
	}

	/**
	 * 根据id查用户
	 * @param id
	 * @return
	 */
	@Override
	public UserVo finByid(String id) {
//id查询用户
		User po = (User)userDao.finByid(Integer.valueOf(id));
		//用户vo
		UserVo vo= new UserVo();
		//po转vo
		BeanUtils.copyProperties(po, vo);
		//返回
		return vo;
	}

	/**
	 * 用户账号密码判断
	 * @param name 账号
	 * @param psw 密码
	 * @return
	 */
	@Override
	public UserVo finnamepsw(String name, String psw) {
		//查询用户
		User uu=userDao.finnamepsw(name, psw);
		//用户vo、
		UserVo vo=new UserVo();
		//判断
		if(uu!=null) {
			//po转vo
			BeanUtils.copyProperties(uu, vo);
		}
		//返回
		return vo;
	}

	/**
	 * 查行数
	 * @param user 用户
	 * @return
	 */
	@Override
	public Long count(UserVo user) {
		// TODO Auto-generated method stub
		//返回
		return (long)userDao.count(user);
	}

	/**
	 * 增加与修改
	 * @param user 用户
	 * @param type 类型
	 * @return
	 */
	@Override
	public int add(UserVo user,int type) {
		// TODO Auto-generated method stub
		//用户po
		User po = new User();
		//vo转po
		BeanUtils.copyProperties(user, po);
		//判断！
		if(!StringUtils.isEmpty(user.getUsId())) {
			//判断状态
			if(type!=1){
				//删除
				userAndroleMapper.delete(user.getUsId());
			}

		}
		//修改状态
		po.setUsState("0");
		//变量
		int f=0;
		//判断id
		if (StringUtils.isEmpty(po.getUsId())){
			//增加
			f=userDao.add(po);
		}else{
			//修改
			f=userDao.update(po);
		}
		//System.out.println(po.getUsId()+"=====================");
		//判断
		if(user.getLike()!=null) {
			//得到数组
			String arr[]=user.getLike();
				//System.out.println("============"+user.getLike());
				//循环
				for (int i = 0; i < arr.length; i++) {
					//用户角色模型
					UserAndrole df=new UserAndrole();
					//角色id
				df.setRoId(Integer.valueOf(arr[i]));
				//用户id
				df.setUsId(po.getUsId());
				//增加
					userAndroleMapper.insert(df);
			}

		}
		//返回
		return f;
	}

	/**
	 * 物理删除
	 * @param user 用户
	 */
	@Override
	public void updatestate(String user) {
		//删除
		delete(Integer.valueOf(user));
	}


	/**
	 * 查角色
	 * @param rolevo 角色
	 * @return
	 */
    @Override
	public List<RoleVo> finAll(RoleVo rolevo) {
    	//角色模型
		Role po = new Role();
		//vo 转po
		BeanUtils.copyProperties(rolevo, po);
		//查角色集合
		List <Role> list = roleDao.finAlls(po);
		//角色vo集合
		List <RoleVo> listvo =new ArrayList<RoleVo>();
		//循环
		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
			//角色
			Role role = (Role) iterator.next();
			//角色vo模型
			RoleVo vo = new RoleVo();
			//po 转vo
			BeanUtils.copyProperties(role, vo);
			//加入集合
			listvo.add(vo);
		}
		//返回集合
		return listvo;
	}


	/**
	 * 查所有用户角色关系
	 * @param id
	 * @return
	 */
	@Override
	public List<UserAndrole> finAll(Integer id) {
		List<UserAndrole> ro=userAndroleMapper.finAlls(id);
		return ro;
	}

	/**
	 * 批量删除
	 * @param ids
	 */
	@Override
	public void deleteAll(String ids) {
		// TODO Auto-generated method stub
		//得到数组
		String temp[] = ids.split(",");
		//循环
		for (int i = 0; i < temp.length; i++) {
			//字符串
			String id = temp[i];
			//判断“”
			if(StringUtils.isEmpty(id)) {
				//跳出此次。继续下次
				continue ;
			}
			//删除
			delete(Integer.valueOf(id));
		}
		
	}

	/**
	 * 查询
	 * @return
	 */
	public List<User> finAll2(){
		//System.out.println("ssss");
	return 	userDao.finAll2();
	}
}
